Estimated | Actual | |||
Time (minutes) | Units (words) | Time | Units | Rates (min/word) |
217 | 2170 | 206 | 2170 | 0.09 |
您首先需要选择您所在的时区以便系统知道它自己身在何处. 从 /usr/share/zoneinfo 中找到您的时区, 然后用 ln 作一个符号链接到 /etc/localtime:
代码清单 1: 设定时区信息 |
# ls /usr/share/zoneinfo (假设您打算用 GMT 时间) # ln -sf /usr/share/zoneinfo/GMT /etc/localtime |
所有发行版 (distributions) 的核心便是 Linux 内核. 它是处于用户程序和系统硬件直接的一层 (layer). Gentoo 提供了数个内核源码以供选择. 可用内核列表及其详细描述请参看 Gentoo 内核指引.
对于 x86 的系统, 我们有 vanilla-sources (linux 开发者们开发的默认内核源码), gentoo-sources (打过性能增强补丁包的内核源码), gentoo-dev-sources (打过性能增强补丁包的 2.6 内核), gs-sources (针对服务器应用打过补丁包的内核), development-sources (普通的 2.6 内核), ...
如果您进行的是无网络安装, 您的选择便局限于 CD 中所提供的内核. 2004.2 版本中提供了:
选择一个内核源码并用 emerge 安装它:
代码清单 2: 安装内核源码 |
# emerge gentoo-sources |
这时看看 /usr/src 目录, 您应该能见到一个名为 linux 的符号链接指向您的内核源码:
代码清单 3: 查看内核源码的符号链接 |
# ls -l /usr/src/linux lrwxrwxrwx 1 root root 12 Oct 13 11:04 /usr/src/linux -> linux-2.4.26-gentoo-r6 |
如果不是这样 (换句话说, 该符号链接指向了另一个内核源码), 请先将其修正再继续后面的步骤:
代码清单 4: 修改内核源码的符号链接 |
# rm /usr/src/linux # cd /usr/src # ln -s linux-2.4.26-gentoo-r6 linux |
下面开始编译您的内核源码. 您可以使用 genkernel 来自动帮您完成这一工作, 它会编译一个和 LiveCD 所用的一样的通用型 (generic) 内核. 不过我们首先要介绍 "手动" 配置的方法, 因为这是优化您系统环境的最佳路径.
您要乐意手动配置内核, 请阅读默认: 手动配置. 您要想用 genkernel, 则请看替代: 使用 genkennel.
手动配置内核通常被视为每个 Linux 用户最难过的一关. 事实非也 (Nothing is less true) -- 在配置过几个内核之后, 您恐怕连它难在哪儿都忘了 ;)
不过呢, 有一件事是确切的: 在您开始配置内核之前, 您必需清楚地了解自己的系统. 许多信息可以从 /proc/pci 中查看到 (如果有 lspci 的话, 也可以通过它来查看). 您还可以用 lsmod 来查看 LiveCD 都使用了那些模块 (这会是一个不错的提示以助您决定启用那些内核选项).
现在, 去到您的内核源码所在目录, 并运行 make menuconfig. 这将启动基于 ncurses (ncurses-based) 的配置界面:
代码清单 5: 调用 menuconfig |
# cd /usr/src/linux # make menuconfig |
您将看到几部分配置内容. 我们会首先列出一些必需启用的选项 (不启用的话, Gentoo 可能无法工作或工作异常).
首先, 启用试验性的代码/驱动. 您需要这个, 否则一些很重要的代码/驱动都不会出现 (Cure: 即在后面的配置选项中找不到它们):
代码清单 6: 选上试验性 (experimental) 的代码/驱动 |
Code maturity level options ---> [*] Prompt for development and/or incomplete code/drivers |
确保您的内核是针对正确的处理器类型 (processor family) 进行编译的: (Cure: intel 的 cpu 可别编了个给 amd cpu 用的内核)
代码清单 7: 选上合适的处理器类型 |
Processor type and features ---> (根据您的系统而定) (Athlon/Duron/K7) Processor family |
下面到 File System (文件系统) 部分, 选择必要的文件系统支持. 请不要将它们编译成 模块形式, 否则您的 Gentoo 系统将无法挂载您的分区. 另外还要选上 Virtual Memory (虚拟内存), /proc file system (进程文件系统), /dev file system (设备文件系统) + Automatically mount at boot (启动时自动挂载文件系统):
代码清单 8: 选择必要的文件系统 |
(2.4.x 内核) File systems ---> [*] Virtual memory file system support (former shm fs) [*] /proc file system support [*] /dev file system support (EXPERIMENTAL) [*] Automatically mount at boot [ ] /dev/pts file system for Unix98 PTYs (2.6.x 内核) File systems ---> Pseudo Filesystems ---> [*] /proc file system support [*] /dev file system support (OBSOLETE) [*] Automatically mount at boot [*] Virtual memory file system support (former shm fs) (按您系统所需选取下例选项) <*> Reiserfs support <*> Ext3 journalling file system support <*> JFS filesystem support <*> Second extended fs support <*> XFS filesystem support |
如果您的 BIOS 无法处理大容量硬盘, and you jumpered the harddrive to report a limited size, 您需要启用下面这一选项以便您能够访问整个硬盘:
代码清单 9: 选上 autogeometry resizing 支持 |
(仅对 2.4.x 内核)
ATA/IDE/MFM/RLL support --->
IDE, ATA and ATAPI Block devices --->
<*> Include IDE/ATA-2 DISK support
[ ] Use multi-mode by default
[*] Auto-Geometry Resizing support
|
如果您用 PPPoE 来连接因特网, 或是拨号上网, 则需要在内核中启用如下选项:
代码清单 10: 选上必要的 PPPoE 驱动 |
(对于 2.4.x 内核) Network device support ---> <*> PPP (point-to-point protocol) support <*> PPP support for async serial ports <*> PPP support for sync tty ports (对于 2.6.x 内核) Device Drivers ---> Networking support ---> <*> PPP (point-to-point protocol) support <*> PPP support for async serial ports <*> PPP support for sync tty ports |
另外有俩压缩 (compression) 选项以及 PPP over Ethernet 选项选上无妨, 却也不是必需的. 它们仅在配置了内核 模式的 PPPoE (kernel mode PPPoE) 之后会被 rp-pppoe 用到.
如果您需要 PPPoE 支持, 请记得同时在内核中选上对您的网卡的支持.
如果您有一个支持超线程 (HyperThreading (tm)) 的 Intel 的 CPU, 或者您的机器上有多个 CPU, 则需要选上 "Symmetric multi-processing support":
代码清单 11: 启用 SMP 支持 |
Processor type and features ---> [*] Symmetric multi-processing support |
内核配置完毕之后, 请继续编译安装.
您的内核经已配置完毕, 下面我们要做的是编译和安装它. 退出配置界面并执行 make dep && make bzImage modules modules_install:
代码清单 12: 编译内核 |
(对于 2.4 内核) # make dep && make bzImage modules modules_install (对于 2.6 内核) # make && make modules_install |
编译完成之后, 将内核映象文件拷贝到 /boot 下. 从这里开始, 我们假设您装的是 2.4.26 版本的 gentoo-sources. 给您的内核映象文件起一个您觉得合适的名字并记住, 因为随后配置启动器 (bootloader) 时会用到它.
代码清单 13: 安装内核 |
# cp arch/i386/boot/bzImage /boot/kernel-2.4.26-gentoo-r6 # cp System.map /boot/System.map-2.4.26-gentoo-r6 |
一些情况下, 把内核配置拷到 /boot 下也是颇为明智的:) (Cure: 总之找个地方保存好当前的内核配置, 下次再编译或想调整内核配置, 你就可以以它为基础进行, 而不必一切从头开始)
代码清单 14: 备份您的内核配置 |
# cp .config /boot/config-2.4.26-gentoo-r6 |
下面继续安装各个 (separate) 内核模块.
如果您正在阅读这一部分, 说明您决定选择我们提供的 genkernel 脚本来为您配置内核.
目前您的内核源码树已经安装完毕, 现在您可以用我们的 genkernel 来为您自动地编译内核. genkernel 会创建一个和 LiveCD 所用的配置几乎一样的 (nearly identically) 内核. 这意味着当您用 genkernel 来编译内核后, 您的系统在启动时会以我们的 LiveCD 那样的方式进行硬件检测和识别. 由于 genkernel 不需要您进行任何手动配置内核的动作, 所以这对于不乐意编译自己内核的用户来说是一个理想的方法.
下面我们看看怎样使用 genkernel, 首先 emerge 它:
代码清单 15: 安装 genkernel |
# emerge genkernel |
现在, 运行 genkernel all 以编译内核. 不过请留意一点, 由于 genkernel 会编译一个几乎支持所有硬件的内核, 所以这一过程会需要相当多的时间!
需要指出的是, 如果您的启动分区用的不是 ext2 或 ext3 文件系统, 那么您就需要用 genkernel --menuconfig all 来手动地在内核中 (编译进内核而非编译成 模块) 加入对所用文件系统的选择.
代码清单 16: 运行 genkernel |
# genkernel all |
genkernel 完毕后, 将创建一个内核, 一堆的模块, 以及一个 initial root disk (Cure: 从 Gentoo 论坛上看到的信息让我觉得这里似乎应该是 initial RAM disk, 要了解 initrd, 请看 "Initial RAM Disk HOWTO") (initrd). 我们随后文档中配置启动器时将用到内核与 initrd. 请记下内核与 initrd 的名字, 因为在您写启动器的配置文件时就得用到. initrd 会在系统启动后立即开始硬件检测工作 (正如 LiveCD 那样).
代码清单 17: 查看已创建的内核映象与 initrd |
# ls /boot/kernel* /boot/initrd* |
下面让我们再做一步以让系统和 LiveCD 更像 -- 安装 hotplug. initrd 是用来检测启动系统所必需的硬件的, 而 hotplug 则用以检测此外的一切. 我们输入下面的命令来 emerge 并启用 hotplug:
代码清单 18: emerge 并启用 hotplug |
# emerge hotplug # rc-update add hotplug default |
一般情况下, 您需要为您系统中的其他硬件 emerge 相应的 ebuilds. 下面列出您可选用的一些内核相关 (kernel-related) 的 ebuild:
Ebuild | 用途 (Purpose) | 命令 |
nvidia-kernel | 为 xorg-x11 提供 NVIDIA 图形加速 | emerge nvidia-kernel |
nforce-net | 针对 NVIDIA NForce(2) 主板上集成的网卡 (ethernet controller) | emerge nforce-net |
nforce-audio | 针对 NVIDIA NForce(2) 主板上集成的声卡 | emerge nforce-audio |
e100 | 针对 Intel 的 e100 高速网卡 (Ethernet Adapters) | emerge e100 |
e1000 | 针对 Intel 的 e1000 千兆级网卡 (Gigabit Ethernet Adapters) | emerge e1000 |
emu10k1 | Creative Sound Blaster Live!/Audigy 支持 | emerge emu10k1 |
ati-drivers | 为 xorg-x11 提供 ATI Radeon 8500+/FireGL 图形加速 | emerge ati-drivers |
ati-drivers-extra | ATI 的一些带图形界面的工具 | emerge ati-drivers-extra |
请留意, 其中有些 ebuild 涉及数量庞大的依赖关系. 您可以使用 emerge --pretend 来查看一个 ebuild 被 emerge 时都有哪些其他的软件包会被作为依赖包安装进来. 我们以 emu10k1 为例:
代码清单 19: 查看会被安装的软件包列表 |
# emerge --pretend emu10k1 |
如果您见到不乐意安装的软件包, 您可以用 emerge --pretend --verbose 来查看在计算依赖关系时都用了哪些 USE 参数:
代码清单 20: 查看 USE 参数的使用情况 |
# emerge --pretend --verbose emu10k1 ... [ebuild N ] media-sound/aumix-2.8 +gpm +nls +gtk +gnome +alsa -gtk2 |
上述例子中, 您会发现 emu10k1 的依赖包之一 (aumix) 用了 gtk 和 gnome 俩 USE 参数, 这会让 gtk 也一同编译进来 (而 gtk 本身依赖于另一庞然大物 xorg-x11). (Cure: 也就是说, 装这么一个 emu10k1 的话, 以这种 USE-flags 设置, 你就需要同时装上 xorg-x11, gtk... 足以折腾你不少的时间!)
如果您不想这些东西都编译的话, 取消所有的 USE 参数, 如:
代码清单 21: 取消 (diselected) 所有的 USE 参数来 emerge emu10k1 |
# USE="-gpm -nls -gtk -gnome -alsa" emerge --pretend emu10k1 |
如果结果让您满意, 把 --pretend 去掉以便真正地开始安装 emu10k1.
要想能自动加载一些 模块, 您得把它们列在 /etc/modules.autoload.d/kernel-2.4 (或 kernel-2.6) 文件中. 您需要的话, 还可以给 模块添加额外的参数 (add extra options to the modules).
运行下述的 find 命令以列出所有的模块. 请记得把 "<内核版本>" 替换成您刚编译的内核版本:
代码清单 22: 查看现有模块列表 |
# find /lib/modules/<内核版本>/ -type f -iname '*.o' -or -iname '*.ko' |
例如, 要自动加载 3c59x.o 模块, 编辑 kernel-2.4 或 kernel-2.6 把这一模块名字添上:
代码清单 23: 编辑 /etc/modules.autoload.d/kernel-2.4 |
(以 2.4 内核为例) # nano -w /etc/modules.autoload.d/kernel-2.4 |
代码清单 24: /etc/modules.autoload.d/kernel-2.4 或 kernel-2.6 |
3c59x |
现在运行 modules-update 以确认 (commit) 您对 /etc/modules.conf 文件的修改:
代码清单 25: 运行 modules-update |
# modules-update |
请继续下一章配置您的系统.